package Interface.Player;

import Interface.Game.JPanelGameSettings;
import Jastermind.Appli;
import Jastermind.Player;
import Various.Tools;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class JDialogColorSettings extends JDialog {

    private Player joueur;
    private boolean isModifColor;
    private JPanel jpListeColors;
    private JButton jbtAjouter;

    public JDialogColorSettings(Player joueur) {
        super();
        this.setTitle("Modification des couleurs jouables");
        this.setModal(true);
        this.setLayout(null);
        this.setSize(300, 200);
        this.setResizable(false);
        this.getContentPane().setBackground(Color.WHITE);
        Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
        this.addWindowListener(new ActionColorSetting());
        //centrer la frame
        this.setLocation((int) (screenDimension.getWidth() - this.getWidth()) / 2, (int) (screenDimension.getHeight() - this.getHeight()) / 2);
        this.joueur = joueur;
        this.isModifColor = false;


        //*********************** Dimension***********************
        //En cas d'évolution de taille
        int jElementWidth = 150;
        int jElementHeight = 20;
        int posYStart = 50;
        int yInterval = 30;

        //*********************** Titre ***********************

        JLabel jblTitre = new JLabel("Paramètres des couleurs : ");
        jblTitre.setBounds(70, 0, 200, 20);
        this.add(jblTitre);

        //*********************** Couleurs jouables***********************

        // Label Couleur jouables
        JLabel jblColorDispo = new JLabel("Couleurs jouables : ");
        jblColorDispo.setBounds(90, posYStart, jElementWidth, jElementHeight);
        this.add(jblColorDispo);

        // Panel Couleur jouables
        jpListeColors = new JPanel();
        jpListeColors.setOpaque(false);
        jpListeColors.setBackground(Color.BLUE);
        jpListeColors.setBounds(25, jblColorDispo.getY() + yInterval, jElementWidth + 100, jElementHeight * 2);
        jpListeColors.setLayout(new GridLayout(2, 6));
        this.setJpListeColors();
        this.add(jpListeColors);

        //*********************** Buttons ***********************

        jbtAjouter = new JButton("Ajouter");
        jbtAjouter.setBounds(25, jpListeColors.getY() + yInterval + 20, 120, 30);
        jbtAjouter.addActionListener(new ActionColorSetting());
        this.setJbtAjouterEnabled();
        this.add(jbtAjouter);

        JButton jbtRetour = new JButton("Fermer");
        jbtRetour.setBounds(jbtAjouter.getX() + 130, jpListeColors.getY() + yInterval + 20, 120, 30);
        jbtRetour.addActionListener(new ActionColorSetting());
        this.add(jbtRetour);

        this.setVisible(true);
    }

    public void setJpListeColors() {
        this.jpListeColors.removeAll();
        for (int iColor = 0; iColor < joueur.getListColors().size(); iColor++) {
            JButton jbtColor = new JButton();
            jbtColor.setComponentPopupMenu(new JPopupMenuColor(this));
            jbtColor.setOpaque(true);
            jbtColor.setBackground(joueur.getListColors().get(iColor));
            jpListeColors.add(jbtColor);
        }
        jpListeColors.revalidate();
        jpListeColors.repaint();
    }

    public void setIsModifColor(boolean isModifColor) {
        this.isModifColor = isModifColor;
    }

    public void setJbtAjouterEnabled() {
        if (joueur.getListColors().size() >= 12) {
            this.jbtAjouter.setEnabled(false);
        }
        else{
            this.jbtAjouter.setEnabled(true);
        }

    }

    public Player getJoueur() {
        return joueur;
    }

    private void closeJDColorSettings() {
        dispose();
        JPanelGameSettings jpGameSettings = new JPanelGameSettings();
        jpGameSettings.getSelectJoueur().setSelectedItem(joueur);
        Appli.getJfMain().setJPContent(jpGameSettings);
        jpGameSettings.setisModifColor(isModifColor);
    }

    private class ActionColorSetting extends WindowAdapter implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getActionCommand().equals("Fermer")) {
                closeJDColorSettings();
            }
            if (e.getActionCommand().equals("Ajouter")) {
                Color colorChosen = JColorChooser.showDialog(null, "Ajout d'une nouvelle couleur ", null);
                if (Tools.isColorNotUse(joueur, colorChosen)) {
                    joueur.getListColors().add(colorChosen);
                    setJpListeColors();
                    setIsModifColor(true);
                    setJbtAjouterEnabled();
                    }
                }
            }
        

        @Override
        public void windowClosing(WindowEvent e) {
            closeJDColorSettings();
        }
    }
}
